Conversation
- deleted old normalizations for IR - corrected normalization script for new parquet format, deleting separate conv file - unified conv QC filtering ranges to sensors.py - added end-to-end forecast -> scoring -> plotting with FCN3
Greptile OverviewGreptile SummaryThis PR integrates the HealDA (Hierarchical Lattice Data Assimilation) AI model into PhysicsNeMo, adding training and inference pipelines for weather forecasting with observation data assimilation. Major Changes:
Critical Issues Found:
Recommendations:
Important Files Changed
|
coreyjadams
left a comment
There was a problem hiding this comment.
Hi @aayushg55 ,
There are some things to address in this PR before we can review it properly. I haven't looked at the logic of the code, I'll let a subject matter expert review.
The code in physicsnemo/models/healda is not aligned with the standards we're moving to for physicsnemo v2.0. All of this feedback is arising because physicsnemo was becoming very fragmented, circular, and unmanageable with such large PRs. We're attempting to improve the user and developer experience by reducing some of this duplication, coding practice violations, etc. Your PR is coming as we're starting to really enforce this stuff - sorry. But we'll have to get the model implementation up to spec before merging.
Some specific things I have found looking quickly, though certainly not everything:
- model code must enter physicsnemo through the experimental folder. We already have a DiT in the experimental folder, and if they can be combined to maximize overlap and minimize code repetition we should do that.
- We also have already some substantial amount of healpix and earth2grid layers / work. We can't duplicate here - please extend the existing layers, as needed, but repetition isn't maintainable.
- There is a lot of tooling in the models folder that does not belong there. profiling.py and types.py come to mind as utilities. sharding looks like it might be domain-parallel specific but I don't know what it's doing. We have a whole suite of distributed and domain parallel tooling, perhaps those should be there.
- bare earth2grid imports in physicsnemo are not allowed.
- We have a number of embeddings already that seem very similar to some of the ones in embedding.py. Let's not duplicate.
- avoid importing from a subdirectory (obs_embedding) into a higher directory like you do, it's just a circular import waiting to happen.
- you have files missing license headers in places.
We have a pre-commit system in physicsnemo that should have caught a lot of these - did you try it?
I think this PR has a ways to go before proper review can start. Would you like to convert it to draft and we can help you? We can schedule a meeting with someone on the physicsnemo team to give you some guidance.
All the best,
Corey
|
Thanks @coreyjadams for taking a look. I agree this needs significant work and refactoring for a proper integration with physicsnemo, and this PR was mainly intended to start the public release process. I’ll mark this as a draft for now. I believe @NickGeneva will be helping me bring this into better shape. Re: pre-commit — Yes, I had run the pre-commit hooks and resolved the linting/license issues it flagged. |
|
Keep in mind that we need to maintain checkpoint compatibility since this checkpoint has been heavily validated and released via a publication. Some of the concerns about apparent code duplication need to be weighed against that. Refactoring and changing state dict names is fine, but these should not change the answer. 100s of person hours are invested in this checkpoint, so we shouldn’t be too rigid. The hpx embedding layer strikes me as a risky component to refactor, and also a fairly simple one which shouldn’t increase maintenance burden much. Not sure if you have a hpx layer yet. |
- removed ObsDecoder/Sharding/Profiling/SubDomain - HpxPatch Embed/Decode subclass the existing DiT tokenizers - refactored the noise+condition embedding into module to be compatible - moved HealDA to experimental - added DropPath to DiT - breaking changes for DropOut in DiT MlpLayer and TE Attn backend (proj_out) - moved HealDA model config classes to examples, but retain sensor related configs - flattend obs_embedding subdir
Made-with: Cursor
| This allows converting map-style datasets to iterable-style. It loads data | ||
| from the dataloaders in a round-robin manner, removing exhausted dataloaders | ||
| from rotation until ALL dataloaders are exhausted. | ||
|
|
There was a problem hiding this comment.
| When combined with the `sampler` argument to DataLoader, this provides explicit control over the order in which an individual multiprocessing worker accesses samples, which is useful for optimizing read performance on chunked datasets. |
| @@ -0,0 +1,194 @@ | |||
| # SPDX-FileCopyrightText: Copyright (c) 2023 - 2026 NVIDIA CORPORATION & AFFILIATES. | |||
There was a problem hiding this comment.
Would be nice to either see these data loading utilities moved into the core package (even if only as a hidden api or dropped in favor of re-chunking the data as a pre-processing step)
Overall, I think these are useful since they allow similar optimizations as DALI (e.g. preloading onto gpu in a separate thread) without having to use DALI
|
BTW can we leave the src/healda package structure? Would be nice to keep the overall structure the same as our other code base, to make updating the recipe simpler |
PhysicsNeMo Pull Request
Description
This integrates the HealDA AI data assimilation model training and inference pipelines into PhysicsNemo. This includes the following in the
examples/weather/healdadirectory:The HealDA Observation Embedding and DiT architectures are integrated at
physicsnemo/models/healda.Checklist
Dependencies
Review Process
All PRs are reviewed by the PhysicsNeMo team before merging.
Depending on which files are changed, GitHub may automatically assign a maintainer for review.
We are also testing AI-based code review tools (e.g., Greptile), which may add automated comments with a confidence score.
This score reflects the AI’s assessment of merge readiness and is not a qualitative judgment of your work, nor is
it an indication that the PR will be accepted / rejected.
AI-generated feedback should be reviewed critically for usefulness.
You are not required to respond to every AI comment, but they are intended to help both authors and reviewers.
Please react to Greptile comments with 👍 or 👎 to provide feedback on their accuracy.